//
// Created by DengLibin on 2018/12/10 0010.
//

#include <stdio.h>
/**
 * 万年历
 */

//是否是闰年
int isLeap(int year)
{
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
    {
        return 1;
    }
    return 0;
}
//计算 从1900年1月1日开始 到指定年月经过了多少天
int getTotalDays(int year, int month)
{
    int totalDays = 0;
    for (int i = 1900; i < year; i++) //计算到year-1年共多少天
    {
        if (isLeap(i))
        {
            totalDays += 366;
        }
        else
        {
            totalDays += 365;
        }
    }

    //计算year年的1到month月 共多少天
    for (int m = 1; m <= month; m++)
    {

        if (m == 2)
        { // 2月
            if (isLeap(year))
            {
                totalDays += 29;
            }
            else
            {
                totalDays += 28;
            }
        }
        //每月30天的月份
        else if (m == 4 || m == 6 || m == 9 || m == 11)
        {
            totalDays += 30;
        }
        //每月31天的月份
        else
        {
            totalDays += 31;
        }
    }

    return totalDays;
}
//计算星期（参数：1900年1月1日开始 经过多少天）
int getWeekDay(int totalDays)
{
    return totalDays % 7;
}
//计算某月共多少天
int getMonthDays(int year, int month)
{
    if (month == 2)
    { // 2月
        if (isLeap(year))
        {
            return 29;
        }
        else
        {
            return 28;
        }
    }
    //每月30天的月份
    else if (month == 4 || month == 6 || month == 9 || month == 11)
    {
        return 30;
    }
    //每月31天的月份
    else
    {
        return 31;
    }
}
//打印信息
void print(int year, int month)
{
    printf("--------%d 年 %d 月 日历--------\n", year, month);
    printf("日   一   二   三   四   五   六\n");  //打印星期
    int totalDays = getTotalDays(year, month - 1); //从1900年1月1日开始到month-1月共多少天
    int weekDay = getWeekDay(++totalDays);         //计算第month月的第一天星期几

    int monthTotalDays = getMonthDays(year, month); //本月多少天

    for (int i = 0; i < weekDay; i++)
    {
        printf("     ");
    }

    for (int i = 1; i <= monthTotalDays; i++)
    {
        if (totalDays % 7 == 6)
        {
            printf("%d\n", i);
        }
        else
        {
            if (i < 10)
            {
                printf("%d    ", i);
            }
            else
            {
                printf("%d   ", i);
            }
        }
        totalDays++;
    }
    printf("\n");
}
int main11()
{

    print(2018, 12);
    return 0;
}
